/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cz.muni.fi.rum.sender.senders;

import cz.muni.fi.rum.reflector.telnet.TelnetServer;
import java.io.IOException;

/**
 *
 * @author pmikulasek
 */
public interface SenderFactory {

    /**
     * Metoda vytvori a pripoji novy messageSender, podle pripojovacich udaju.
     * Pokud byl jiz nejaky message sender vytvoren, tak bude automaticky zavren a odpojen.
     * @param server kontaktni udaje na zaklade kterych bude messageSender pripojen.
     * @return Nova instance MessageSender, pripojena k poskytnutemu serveru.
     *
     * @throws  IOException V pripade nevydareneho pripojeni. Pote neni nastaven zadny messageSender.
     * <b>POZOR - vyjimku je treba osetrit, instance neni v konzistentnim stavu.</b>
     *
     * @see SenderFactory#getPresentMessageSender()
     */
    MessageSender createAndConnectNewMessageSender(TelnetServer server) throws IOException;

    /**
     * Metoda vrati aktualne pripojeny MessageSender.
     * @return MessageSender, ktery je aktualne pripojeny.
     *
     * @throws IllegalStateException V pripade ze neni pripojeny zadny messageSender
     */
    MessageSender getPresentMessageSender();

    /**
     * Metoda pripravi bufferSender a vrati jeho instanci.
     * @return instance BufferSenderu
     */
    MainSender getBufferSender();

    /**
     * Metoda pripravi ForceSender a vrati jeho instanci.
     * @return instance ForceSenderu
     */
    MainSender getForceSender();
}
